/**
 * @description json schema 校验中间件
 */

const { ErrorModel } = require("../model/ResModel");
const { jsonSchemaFileInfo } = require("../model/ErrorInfo");

//  generator的意思 产出一个校验函数
/**
 * 生成 json schema 验证的中间件
 * @param {function} validateFn 验证函数
 */
function genValidator(validateFn) {
  // validateFn这个函数可以是验证用户函数，也可以起验证其他的函数

  // 定义中间件函数，中间件只是公共的功能，不参加业务的往来，所以单独抽离出来
  async function validator(ctx, next) {
    const data = ctx.request.body;
    // 校验
    const error = validateFn(data);

    // 验证失败
    if (error) {
      ctx.body = new ErrorModel(jsonSchemaFileInfo);
      return;
    }

    // 验证成功继续
    await next();
  };
  // 返回中间件
  return validator;
}

module.exports = {
  genValidator
};